#pragma once
template <typename T> class Singleton {
protected:
  Singleton<T>() = default;

private:
  Singleton<T>(const Singleton<T> &) = delete;
  Singleton<T> &operator=(const Singleton<T> &) = delete;

public:
  ~Singleton<T>() = default;
  static T &GetInstance() {
    static T _instance;
    return _instance;
  }
};